import json
import os
import time
from datetime import datetime
import requests

class WecomRobotReminder:
    def __init__(self, webhook_url, user_id_list, data_file='records.json'):
        """
        初始化企业微信机器人提醒器
        
        Args:
            webhook_url: 企业微信群机器人的Webhook地址
            user_id_list: 企业微信user_id列表
            data_file: 数据保存文件路径
        """
        self.webhook_url = webhook_url
        self.user_id_list = user_id_list
        self.data_file = data_file
        self.data = self._load_data()
    
    def _load_data(self):
        """加载保存的数据"""
        if os.path.exists(self.data_file):
            try:
                with open(self.data_file, 'r', encoding='utf-8') as f:
                    return json.load(f)
            except Exception as e:
                print(f"加载数据文件失败: {e}")
        return {
            'current_index': 0,
            'last_reminder_date': None
        }
    
    def _save_data(self):
        """保存数据"""
        with open(self.data_file, 'w', encoding='utf-8') as f:
            json.dump(self.data, f, ensure_ascii=False, indent=2)
    
    def should_send_today(self):
        """判断今天是否应该发送提醒"""
        today = datetime.now().strftime('%Y-%m-%d')
        return self.data['last_reminder_date'] != today
    
    def get_current_user_id(self):
        """获取当前应该@的用户ID"""
        return self.user_id_list[self.data['current_index']]
    
    def update_index(self):
        """更新索引到下一个用户"""
        self.data['current_index'] = (self.data['current_index'] + 1) % len(self.user_id_list)
        self.data['last_reminder_date'] = datetime.now().strftime('%Y-%m-%d')
        self._save_data()
    
    def send_daily_reminder(self, content_template):
        """发送每日提醒
        
        Args:
            content_template: 消息内容模板，使用{user_id}作为@用户的占位符
        """
        if not self.should_send_today():
            print("今天已经发送过提醒，跳过")
            return False
        
        current_user_id = self.get_current_user_id()
        content = content_template.format(user_id=f'<@user_id>')  # 企业微信机器人@人需要在content中包含<@user_id>
        
        # 构建消息体
        message = {
            "msgtype": "text",
            "text": {
                "content": content,
                "mentioned_list": [current_user_id]  # 指定要@的用户ID
            }
        }
        
        try:
            # 发送消息
            response = requests.post(self.webhook_url, json=message)
            result = response.json()
            
            if result.get('errcode') == 0:
                print(f"消息发送成功: {content}")
                self.update_index()
                return True
            else:
                print(f"消息发送失败: {result}")
                return False
        except Exception as e:
            print(f"发送消息异常: {e}")
            return False

if __name__ == "__main__":
    # 配置信息 - 请替换为实际值
    CONFIG = {
        "webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=0a3cc6d7-5ac9-4f71-b153-c12922d287a4",  # 企业微信群机器人Webhook地址
        "user_id_list": ["yuhh-c", "guoxq", "maoyj","xurx"],  # 企业微信user_id列表
        "message_template": "今天反馈值班人员是："  # 消息模板，<@user_id>表示@特定用户
    }
    
    # 创建提醒器实例
    reminder = WecomRobotReminder(
        webhook_url=CONFIG['webhook_url'],
        user_id_list=CONFIG['user_id_list']
    )
    
    # 发送提醒
    reminder.send_daily_reminder(CONFIG['message_template'])
    
    # 如果你需要定期执行此脚本，可以使用以下代码（取消注释）
    # 注意：生产环境建议使用系统级定时任务（如crontab）
    # while True:
     #  now = datetime.now()
         # 每天早上9点发送提醒
      # if now.hour == 9 and now.minute == 0:
       #   reminder.send_daily_reminder(CONFIG['message_template'])
      #time.sleep(60)  # 每分钟检查一次    